#include "compile_run.hpp"
#include "../comm/httplib.h"
using namespace std;
using namespace ns_compile_and_run;
using namespace httplib;

void Usage(string proc)
{
    cerr << "Usage: " << "\n\t" << proc << "port" << endl;
}

//编译服务随时可能被多个人请求，必须保证传递上来的code，形成源文件名称的时候，要具有
//唯一性, 不然多个用户间会相互影响
//.compile_server port
int main(int argc, char* argv[])   
{
    if(argc  != 2)
    {
        Usage(argv[0]);
        return 1;
    }
    Server svr;

    svr.Get("/hello",[](const Request& req,Response& resp){
         //用来进行基本测试
         resp.set_content("hello httplib,你好 httblib!","text/plain;charset=utf-8");
     });

    svr.Post("/compile_and_run",[](const Request& req,Response& resp){
        //用户请求的服务正文是我们想要的json string
        cout << "用户访问post请求" << endl;
        string in_json = req.body;
        string out_json;
        if(!in_json.empty())
        {
            CompileAndRun::Start(in_json,&out_json);
            resp.set_content(out_json,"application/json;charset=utf-8");
        }
    });

    // svr.set_base_dir("./wwwroot");   
    cout << atoi(argv[1]) << endl;
    svr.listen("0.0.0.0",atoi(argv[1]));

    

    //提供的编译服务，打包成一个网络服务
    //cpp-httplib   


    // in_json:{"code" : "#include...", "input": ""，"cpu_limit":"1", "mem_limit":"10240"}
    // *out_json:{"status":"0", "reason":"", "stdout":"", "stderr":""}
    //通过http， 让client给我们上传一个json string数据
    //下面的工作，充当客户端请求的json串
    // string in_json;
    // Json::Value in_value;
    // in_value["code"] = R"(#include <iostream>
    // int main(){
    //     std::cout << "you can see me" << std::endl;
    //     aaaaaaaa
    //      return 0;  })";
    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 10240 * 3;

    // Json::FastWriter writer;
    // in_json = writer.write(in_value);

    // // std::cout << in_json << endl;
    // //这个是将来给客户端返回的json串
    // string out_json;
    // CompileAndRun::Start(in_json,&out_json);

    // cout << out_json << endl;

    return 0;
}
